const Subscription = require("egg").Subscription;

class ForwardTask extends Subscription {
  // 每7秒执行一次
  static get schedule() {
    return {
      interval: "7s",
      type: "worker",
    };
  }

  async subscribe() {
    const { ctx, service } = this;
    const now = new Date();
    try {
      // 任务1：检查会员有效期
      ctx.logger.info("开始检查VIP 有效期");
      const expiredVips = await ctx.model.Wxfriend.find({
        isvip: true,
        vipExpireTime: { $lt: now },
      });
      if (expiredVips.length > 0) {
        const ids = expiredVips.map(v => v._id);
        await ctx.model.Wxfriend.updateMany({ _id: { $in: ids } }, { $set: { isvip: false } });
        ctx.logger.info("已更新 VIP 状态");
      }

      // 任务2：批量获取最多 3 条待处理任务
      const forward = await ctx.model.Forwardtask.findOne({ status: 0 })
        .sort({ createTime: -1 })
        .lean();
      if (!forward) {
        ctx.logger.info("该时间没有转发任务");
      } else {
        const msg = forward.message;
        if (forward.msgtype === "1") {
          // 转发文本
          await service.sendmsg.sendText2(forward.wxid, msg, forward.ownerWxid);
          ctx.logger.info("消息已转发");
        } else if (forward.msgtype === "3") {
          // 转发图
          const imgPath = msg.match(/pic=(.*?),isDecrypt/); // 提取路径
          if (imgPath && imgPath[1]) {
            await service.sendmsg.sendImage(
              forward.wxid,
              imgPath[1],
              forward.ownerWxid
            );
            ctx.logger.info("消息已转发");
          }
        }

        // 批量更新状态为已处理
        await ctx.model.Forwardtask.updateOne(
          { _id: forward._id },
          { status: 1 }
        );
      }
    } catch (error) {
      ctx.logger.error(`转发任务失败: ${error.message}`);
    }
  }
}

module.exports = ForwardTask;
